﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using Website.Logger;
using DAL;
using UtilityExtensions;
using BOL;
using BOL.UI;
using WebLib;
using System.Web.Script.Services;
using System.Web.Services;
using MapControl;


namespace UILGestion.VentaAdmin.UI
{
    public partial class UIMapForm : System.Web.UI.Page
    {
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
        private void InitializeComponent()
        {
            this.map.Click += new ImageMapClickEventHandler(this.imageMap_Click);
            //this.Load += new System.EventHandler(this.Page_Load);

        }
       


        protected void Page_Load(object sender, EventArgs e)
        {
              if (!Page.IsPostBack)
            {
                try
                {
                    
                    
                    
                    idProyecto.Value = (string)Request.QueryString["idProyecto"];
                    paginaAnt.Value = Page.Request.UrlReferrer.AbsoluteUri;
                    menuCtrl1.loadMenuVenta(idProyecto.Value.ToInt());
                    LoadMapaProyecto();

                }
                catch (SqlException sqlex)
                {
                    WebServerSideSqlError.Log(sqlex);

                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


                }
                catch (Exception ex)
                {
                    WebServerSideError.Log(ex);
                    ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                         "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

                }

            }
            
        }

        public void HideButon()
        {
            proformarBTN.Visible = false;
            ventaBTN.Visible = false;
        }
        public void LoadMapaProyecto()
        {
            var id = (string)Request.QueryString["idProyecto"];
            var Proyecto = DbUtil.Db.Proyectos.Single(p => p.idInternal == id.ToInt());
            proyectoLBTN.Text = Proyecto.descripcion;
            map.Areas.Clear();

            //map.ImageUrl = "../Images/elegiretapa.jpg";
            map.ImageUrl = "../../Admin/ImagenSetForm.aspx?id={0}&type=Proyecto".Fmt(Proyecto.idArchivo);
            map.Attributes.Add("CssClass", "mapHiLight");
            map.Width = Unit.Parse(Proyecto.ancho.ToString());
            map.Height = Unit.Parse(Proyecto.alto.ToString());

            foreach (var item in Proyecto.Etapas)
            {
                ImageMapPolygonArea etapas = new ImageMapPolygonArea();
                etapas.ToolTip = item.descripcion;
                //etapas.HotSpotMode=HotSpotMode.PostBack;
                //etapas.HRef= string.Format("E:{0}", item.idInternal.ToString());
                etapas.HRef = null;//string.Format("#", item.idInternal.ToString());
                etapas.ID = string.Format("E:{0}", item.idInternal.ToString());
                etapas.Points = (item.mapCordenada == null) ? "" : item.mapCordenada;
                etapas.Attributes.Add("state", item.idInternal.ToString());
                map.Areas.Add(etapas);

            }

            datosPNL.Visible = false;
            modeloPNL.Visible = false;
            botonesPNL.Visible = false;

        }
        private void LoadMapaEtapa(int idEtapa,int idlocalizacionSelec)
        {
            var etapa = DbUtil.Db.Etapas.SingleOrDefault(p => p.idInternal == idEtapa);
            etapaLBTN.Text = etapa.descripcion;
            idEtapaSeleccion.Value = etapa.idInternal.ToString();


            map.Areas.Clear();
            map.ImageUrl = "../../Admin/ImagenSetForm.aspx?id={0}&type=Etapa".Fmt(etapa.idArchivo);
            map.Width = Unit.Parse(etapa.ancho.ToString());
            map.Height = Unit.Parse(etapa.alto.ToString());
           
            

            //si son lotes
            foreach (var item in etapa.UIs.Where(p => p.idTipoUI == 4 | p.idTipoUI == 3))
            {
                // si existe  ui en el mapade torres en caso de departamentos

                ImageMapPolygonArea uis = new ImageMapPolygonArea();

                uis.ToolTip = item.descripcion;
                uis.ID = string.Format("UI:{0}", item.idInternal.ToString());
                //uis.Attributes.Add("state", item.EstadoItem.descripcion);
                uis.Attributes.Add("state", "{1},{0}".Fmt(item.EstadoItem.descripcion, item.idInternal));
                uis.HRef = null;// string.Format("UI:{0}", item.idInternal.ToString());
                uis.Points = item.mapCordenada == null ? "" : item.mapCordenada;
                map.Areas.Add(uis);

            }
          


            foreach (var item in etapa.UILocalizacions.Where(p => p.mapCordenada.HasValue()))
            {


                ImageMapPolygonArea uis = new ImageMapPolygonArea();
                uis.ToolTip = item.descripcion;
                //uis.HotSpotMode = HotSpotMode.PostBack;
                uis.ID = string.Format("L:{0}", item.idInternal.ToString());

                uis.Attributes.Add("state", "{1},{0}".Fmt("Libre", item.idInternal));
               
               
                    if (item.idInternal == idlocalizacionSelec)
                uis.Attributes.Add("state", "{1},{0}".Fmt("Seleccion", item.idInternal));
              
                
                

                uis.HRef = null;// string.Format("L:{0}", item.idInternal.ToString());
                uis.Points = item.mapCordenada == null ? "" : item.mapCordenada;
                map.Areas.Add(uis);

            }

           

        }

        private void LoadDepartamentos(int idTorre,int idUISeleccion)
        {
            var torre = DbUtil.Db.UILocalizacions.SingleOrDefault(p => p.idInternal == idTorre);
            //departamento.Rows.Clear();
            //departamento.Caption=torre.descripcion;
            LoadMapaEtapa(torre.idEtapa,torre.idInternal);

            mapDepartamentos.Areas.Clear();
            mapDepartamentos.ImageUrl = "../../Admin/ImagenSetForm.aspx?id={0}&type=Localizacion".Fmt(torre.idArchivo);
            mapDepartamentos.Width = Unit.Parse(torre.ancho.ToString());
            mapDepartamentos.Height = Unit.Parse(torre.alto.ToString());
            torreoLBL.Text =String.Format("{0}-{1}",torre.Etapa.descripcion, torre.descripcion);
           
            foreach (var item in torre.UIs.Where(p=>p.mapCordenada.HasValue()))
            {
                ImageMapRectangleArea uis = new ImageMapRectangleArea();


                //uis.HotSpotMode = HotSpotMode.PostBack;
                uis.HRef = null; //   string.Format("UI:{0}", item.idInternal.ToString());
                uis.ID = string.Format("UI:{0}", item.idInternal.ToString());
                uis.Rectangle = item.mapCordenada == null ? "" : item.mapCordenada;
                //string vl = xMapa.Replace("<1MA>", char.ConvertFromUtf32(39));

               
                    uis.Attributes.Add("state", "{1},{0}".Fmt(item.EstadoItem.descripcion, item.idInternal));
               
                    if (item.idInternal== idUISeleccion)
                        uis.Attributes.Add("state", "{1},{0}".Fmt("Seleccion", item.idInternal));
               

                uis.ToolTip = string.Format("{0} ({1})", item.descripcion, item.EstadoItem.descripcion);



                mapDepartamentos.Areas.Add(uis);



            }

            datosPNL.Visible = true;
            modeloPNL.Visible = true;
            botonesPNL.Visible = true;
            detalleUNPL.Update();
        }

        public void imageMap_Click(object sender, ImageMapClickEventArgs args)
        {
            // si biene de proyecto

            //ImageMapArea area = map.Areas[args.AreaIndex];
            string[] imagen = args.ID.Split(':');
            switch (imagen[0])
            {
                case "P":
                    LoadMapaProyecto();
                    break;
                case "E":
                    LoadMapaEtapa(imagen[1].ToInt(),0);
                    break;
                case "L":
                   
                    LoadDepartamentos(imagen[1].ToInt(),0);
                    break;
                case "UI":
                    loadUI(imagen[1].ToInt());

                    break;

                default:
                    break;
            }

        }

        private void loadUI(int idUI)
        {
            var ui = DbUtil.Db.UIs.SingleOrDefault(p => p.idInternal == idUI);


            UILBL.Text = String.Format("{0}-{1}-{2}", ui.Etapa.descripcion, ui.UILocalizacion.descripcion, ui.descripcion);
            this.idUI.Value = idUI.ToString();
            tipoUILBL.Text = ui.UITipo.descripcion;
            codigoLBL.Text = ui.codigo;
            localizacionLBL.Text = ui.UILocalizacion.descripcion;
            bloqueLBL.Text = ui.UIBloque.descripcion;
            estadoLBL.Text = ui.EstadoItem.descripcion;
            modeloLBL.Text = ui.UIModeloTipo.descripcion;
            areaLBL.Text = string.Format("Area:{0} /Techada:{1} /Ocupada{2}", ui.areaTerreno, ui.areaTechada, ui.areaOcupada);
            precioLBL.Text = string.Format("{0}{1:N}", ui.Moneda.simbol, ui.precio);
            datosPNL.Visible = true;
            // carga IMG

            //modeloIMG.ImageUrl = "~/Admin/ImagenSetForm.aspx?id={0}&type=Modelo".Fmt(ui.UIModeloTipo.idArchivo);
            datosPNL.Visible = true;
            modeloPNL.Visible = true;
            botonesPNL.Visible = true;

            uiDetalleUPNL.Update();
            LoadDepartamentos(ui.idLocalizacion, ui.idInternal);

        }

        protected void LBTN_Click(object sender, EventArgs e)
        {
            try
            {
                if (((LinkButton)sender).ID == proyectoLBTN.ID)
                {
                    LoadMapaProyecto();
                }
                if (((LinkButton)sender).ID == etapaLBTN.ID)
                {
                    LoadMapaEtapa(idEtapaSeleccion.Value.ToInt(),0);
                }

            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);

                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                     "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }

        protected void BTN_Click(object sender, EventArgs e)
        {
            if (idUI.Value.ToInt() != 0)
            {
                var idProyecto = (string)Request.QueryString["idProyecto"];
                if (((Button)sender).ID == proformarBTN.ID)
                {
                    Response.Redirect("~/VentaAdmin/Proforma/ProformaEditForm.aspx?type=A&idUI={0}&idProyecto={1}".Fmt(idUI.Value, idProyecto), true);
                }
                if (((Button)sender).ID == ventaBTN.ID)
                {
                    Response.Redirect("~/VentaAdmin/OrdenVenta/OrdenVentaEditForm.aspx?type=A&idUI={0}&idProyecto={1}".Fmt(idUI.Value, idProyecto), true);
                }
            }

        }

    }
}